Файл: Life.txt
Дата: 10.04.2014
1:
2:
3:
4: присвоить РАЗМЕР_ПОЛЯ 15
5: присвоить РАЗМЕР_ЯЧЕЙКИ 30
6: присвоить МНОЖЕСТВО_ЯЧЕЕК {}
7: присвоить НОМЕР_ПОКОЛЕНИЯ 1
8: присвоить ЦВЕТ_РОЖДЕНИЯ [$Синий]
9: присвоить МЕНЯТЬ_ЦВЕТ_ПОКОЛЕНИЙ 1
10:
11: Решетка_создать ПОЛЕ_ПРОТОТИП
12: сущность ПОЛЕ ПОЛЕ_ПРОТОТИП
13: столбцов [РАЗМЕР_ПОЛЯ]
14: строк [РАЗМЕР_ПОЛЯ]
15: ширина_ячейки [РАЗМЕР_ЯЧЕЙКИ]
16: высота_ячейки [РАЗМЕР_ЯЧЕЙКИ]
17: создать
18: память очистить ПОЛЕ_ПРОТОТИП
19:
20: Решетка_рассчитать ПОЛЕ
21: Решетка_рисовать ПОЛЕ
22:
23:
24: Рождение_ячейки 10 8 1
25: Рождение_ячейки 4 8 1
26: Рождение_ячейки 5 8 1
27: Рождение_ячейки 6 8 1
28: Рождение_ячейки 7 10 1
29: Рождение_ячейки 7 11 1
30: Рождение_ячейки 7 12 1
31: Рождение_ячейки 7 4 1
32: Рождение_ячейки 7 5 1
33: Рождение_ячейки 7 6 1
34: Рождение_ячейки 8 8 1
35: Рождение_ячейки 9 8 1
36:
37: присвоить гор1 500 гор2 600
38: Рисовать_кнопку [гор1] 50 [гор2] 100 [$Салатовый] Шаг
39: Рисовать_кнопку [гор1] 100 [гор2] 150 [$Салатовый] Загрузить
40: Рисовать_кнопку [гор1] 150 [гор2] 200 [$Салатовый] Сохранить
41: Рисовать_кнопку [гор1] 200 [гор2] 250 [$Салатовый] Очистить
42: Рисовать_кнопку [гор1] 250 [гор2] 300 [$Розовый] Выход
43: рисовать текстВПрямоугольнике 480 300 620 400 'Кликая мышью, можно менять состояние клеток.'
44: память очистить гор1 гор2
45: Обновить_номер_поколения
46:
47: функция _$ВЫБОР
48:
49: выбрать [_$ВЫБОР;ОБЪЕКТ]
50: вариант ПОЛЕ
51: Решетка_определить_ячейку [_$ВЫБОР;ОБЪЕКТ] [_$ВЫБОР;ГОР] [_$ВЫБОР;ВЕР]
52: Инвертировать_ячейку (Решетка_определить_ячейку [_$ВЫБОР;ОБЪЕКТ] [_$ВЫБОР;ГОР] [_$ВЫБОР;ВЕР] )
53: вариант Шаг
54: Новое_поколение
55: вариант Загрузить
56: Ячейки_загрузить
57: вариант Сохранить
58: Ячейки_сохранить
59: вариант Очистить
60: Ячейки_очистить
61: вариант Выход
62: рисовать конец
63: СТОП
64: конецВыбора
65: возврат
66:
67: функция Инвертировать_ячейку коорд
68: память локальный гор вер
69: список взять гор [коорд] 1
70: список взять вер [коорд] 2
71: если (память существует $результат "ЯЧЕЙКА;[гор];[вер]" )
72: Гибель_ячейки [гор] [вер]
73: иначе
74: Рождение_ячейки [гор] [вер] [НОМЕР_ПОКОЛЕНИЯ]
75: конец
76: возврат
77:
78: функция Рождение_ячейки гор вер итерация
79: присвоить "ЯЧЕЙКА;[гор];[вер]" [итерация]
80: множество или МНОЖЕСТВО_ЯЧЕЕК $ "{[гор];[вер]}"
81: Решетка_рисовать_фигуру ПОЛЕ ячейка [гор] [вер] [ЦВЕТ_РОЖДЕНИЯ]
82: возврат
83:
84: функция Гибель_ячейки гор вер
85: память очистить "ЯЧЕЙКА;[гор];[вер]"
86: множество разность МНОЖЕСТВО_ЯЧЕЕК $ "{[гор];[вер]}"
87: Решетка_рисовать_фигуру ПОЛЕ ячейка [гор] [вер] [$Белый]
88: возврат
89:
90: функция Новое_поколение
91: память локальный гор вер
92: присвоить МНОЖЕСТВО_ДОБАВИТЬ {} МНОЖЕСТВО_УДАЛИТЬ {}
93:
94: увеличить НОМЕР_ПОКОЛЕНИЯ
95: Обновить_номер_поколения
96:
97: для гор (список сгенерить $результат 1 [ПОЛЕ;столбцов] )
98: для вер (список сгенерить $результат 1 [ПОЛЕ;строк] )
99: присвоить соседей (Количество_соседей [гор] [вер] )
100: если (память существует $результат "ЯЧЕЙКА;[гор];[вер]" )
101:
102: если [соседей] < 2
103: множество или МНОЖЕСТВО_УДАЛИТЬ $ "{[гор];[вер]}"
104: конец
105: если [соседей] > 3
106: множество или МНОЖЕСТВО_УДАЛИТЬ $ "{[гор];[вер]}"
107: конец
108: иначе
109:
110: если [соседей] = 3
111: множество или МНОЖЕСТВО_ДОБАВИТЬ $ "{[гор];[вер]}"
112: конец
113: конец
114: следующий
115: следующий
116:
117: если [МЕНЯТЬ_ЦВЕТ_ПОКОЛЕНИЙ]
118: список выбратьСлучайный ЦВЕТ_РОЖДЕНИЯ "[$Синий];[$Красный];[$Желтый];[$Зеленый];[$Черный]"
119: конец
120:
121: для [МНОЖЕСТВО_ДОБАВИТЬ]
122: список взять гор [$ОбъектЦикла] 1
123: список взять вер [$ОбъектЦикла] 2
124: Рождение_ячейки [гор] [вер] [НОМЕР_ПОКОЛЕНИЯ]
125: следующий
126: для [МНОЖЕСТВО_УДАЛИТЬ]
127: список взять гор [$ОбъектЦикла] 1
128: список взять вер [$ОбъектЦикла] 2
129: Гибель_ячейки [гор] [вер]
130: следующий
131: возврат
132:
133: функция Количество_соседей гор вер
134: память локальный рез
135: присвоить рез 0
136:
137: увеличить рез (Проверь_соседа [гор] [вер] -1 -1 )
138: увеличить рез (Проверь_соседа [гор] [вер] -1 0 )
139: увеличить рез (Проверь_соседа [гор] [вер] -1 1 )
140: увеличить рез (Проверь_соседа [гор] [вер] 0 -1 )
141: увеличить рез (Проверь_соседа [гор] [вер] 0 1 )
142: увеличить рез (Проверь_соседа [гор] [вер] 1 -1 )
143: увеличить рез (Проверь_соседа [гор] [вер] 1 0 )
144: увеличить рез (Проверь_соседа [гор] [вер] 1 1 )
145:
146: присвоить $результат [рез]
147: возврат
148:
149: функция Проверь_соседа гор вер смещ_гор смещ_вер
150: память локальный рез
151: увеличить гор [смещ_гор]
152: увеличить вер [смещ_вер]
153:
154: если (память существует $результат "ЯЧЕЙКА;[гор];[вер]" )
155: присвоить рез 1
156: иначе
157: присвоить рез 0
158: конец
159: присвоить $результат [рез]
160: возврат
161:
162: функция Ячейки_очистить
163: для [МНОЖЕСТВО_ЯЧЕЕК]
164: список взять гор [$ОбъектЦикла] 1
165: список взять вер [$ОбъектЦикла] 2
166: Гибель_ячейки [гор] [вер]
167: следующий
168: присвоить НОМЕР_ПОКОЛЕНИЯ 1
169: Обновить_номер_поколения
170: присвоить ЦВЕТ_РОЖДЕНИЯ [$Синий]
171: возврат
172:
173: функция Ячейки_загрузить
174: память локальный гор вер строка
175: ввести переменная имя_файла 'Загрузить из файла:' 1
176: если [$УспешныйВвод]
177: Ячейки_очистить
178: файл читать "[$ТекущийКаталог][имя_файла].fld"
179: файл читатьСтроку НОМЕР_ПОКОЛЕНИЯ
180: Обновить_номер_поколения
181: файл читатьСтроку строка
182: пока [$СтрокаПрочитана]
183: список взять гор [строка] 1
184: список взять вер [строка] 2
185: список взять строка [строка] 3
186: Рождение_ячейки [гор] [вер] [строка]
187: файл читатьСтроку строка
188: цикл
189: файл конецЧтения
190: показать сообщение Загрузил!
191: конец
192: возврат
193:
194: функция Ячейки_сохранить
195: память локальный гор вер
196: ввести переменная имя_файла 'Сохранить в файл:' 1
197: если [$УспешныйВвод]
198: файл писать "[$ТекущийКаталог][имя_файла].fld"
199: >[НОМЕР_ПОКОЛЕНИЯ]
200: для [МНОЖЕСТВО_ЯЧЕЕК]
201: список взять гор [$ОбъектЦикла] 1
202: список взять вер [$ОбъектЦикла] 2
203: >[гор];[вер];[ЯЧЕЙКА;[гор];[вер]]
204: следующий
205: файл конецЗаписи
206: показать сообщение Сохранил!
207: конец
208: возврат
209:
210: функция Обновить_номер_поколения
211: присвоить $ЦветТекста [$Черный] $ЦветКисти [$Белый] $ТипКисти 1 $ЦветЛинии [$Белый]
212: рисовать прямоугольник 500 0 600 50
213: рисовать текстВПрямоугольнике 500 0 600 50 "Поколение: [НОМЕР_ПОКОЛЕНИЯ]"
214: возврат
215:
216:
217:
218:
219:
220:
221:
222: функция Рисовать_кнопку x1 y1 x2 y2 цвет текст
223: присвоить $ТолщинаЛинии 1 $ЦветЛинии [цвет] $ЦветКисти [цвет] $ТипКисти 1
224: рисовать прямоугольник [x1] [y1] [x2] [y2]
225: присвоить $ТипКисти 2 $ЦветЛинии 1
226: рисовать прямоугольник [x1] [y1] [x2] [y2]
227: присвоить $ТипКисти 2 $ЦветТекста 1 $ТипТекста 0
228: рисовать текстВПрямоугольнике [x1] [y1] [x2] [y2] [текст]
229: рисовать добавитьСенсор [x1] [y1] [x2] [y2] [текст]
230: возврат
231:
232: функция Рисовать_кнопки список_кнопок
233: память локальный x1 y1 x2 y2 y3
234:
235: присвоить x1 850 y1 0 x2 1200 y2 40 y3 30
236:
237: для [список_кнопок]
238: Рисовать_кнопку [x1] [y1] [x2] (вычислить + $результат [y1] [y2] ) 16 [$ОбъектЦикла]
239: увеличить y1 [y2]
240:
241: следующий
242:
243: присвоить $ТипКисти 1 $ЦветКисти 16 $ЦветЛинии [$ЦветКисти]
244: рисовать прямоугольник [x1] [y1] [x2] 5000
245: возврат
246:
247:
248:
249:
250:
251:
252:
253: функция Решетка_создать решетка
254: сущность [решетка]
255: коорд_гор_1 0
256: коорд_вер_1 [[решетка];коорд_гор_1]
257: столбцов 10
258: строк [[решетка];столбцов]
259: ширина_ячейки 30
260: высота_ячейки [[решетка];ширина_ячейки]
261: толщина_линии 1
262: цвет_фона [$белый]
263: цвет_линии [$черный]
264: создать
265: возврат
266:
267: функция Решетка_рассчитать решетка
268: вычислить + "[решетка];коорд_гор_2" [[решетка];коорд_гор_1] (вычислить * $результат [[решетка];столбцов] [[решетка];ширина_ячейки] )
269: вычислить + "[решетка];коорд_вер_2" [[решетка];коорд_вер_1] (вычислить * $результат [[решетка];строк] [[решетка];высота_ячейки] )
270: возврат
271:
272: функция Решетка_рисовать решетка
273: память локальный смещение
274:
275: присвоить $ЦветКисти [[решетка];цвет_фона] $ЦветЛинии [[решетка];цвет_линии]
276: присвоить $ТипКисти 1 $ТипЛинии 1 $ТолщинаЛинии [[решетка];толщина_линии]
277:
278: рисовать прямоугольник [[решетка];коорд_гор_1] [[решетка];коорд_вер_1] [[решетка];коорд_гор_2] [[решетка];коорд_вер_2]
279:
280: если [[решетка];толщина_линии] > 0
281:
282: присвоить смещение [[решетка];коорд_гор_1]
283: для (список сгенерить $результат 0 [[решетка];столбцов] )
284: рисовать линия [смещение] [[решетка];коорд_вер_1] [смещение] [[решетка];коорд_вер_2]
285: увеличить смещение [[решетка];ширина_ячейки]
286: следующий
287:
288:
289: присвоить смещение [[решетка];коорд_вер_1]
290: для (список сгенерить $результат 0 [[решетка];строк] )
291: рисовать линия [[решетка];коорд_гор_1] [смещение] [[решетка];коорд_гор_2] [смещение]
292: увеличить смещение [[решетка];ширина_ячейки]
293: следующий
294: конец
295:
296: рисовать добавитьСенсор [[решетка];коорд_гор_1] [[решетка];коорд_вер_1] [[решетка];коорд_гор_2] [[решетка];коорд_вер_2] [решетка]
297: возврат
298:
299: функция Решетка_определить_ячейку решетка х у
300: вычислить - х $ [[решетка];коорд_гор_1]
301: вычислить делитьЦелое гор [х] [[решетка];ширина_ячейки]
302: увеличить гор
303:
304: вычислить - у $ [[решетка];коорд_вер_1]
305: вычислить делитьЦелое вер [у] [[решетка];высота_ячейки]
306: увеличить вер
307:
308:
309: присвоить $результат "[гор];[вер]"
310: возврат
311:
312: функция Решетка_рисовать_фигуру решетка фигура гор вер цвет текст
313: увеличить гор -1
314: увеличить вер -1
315: вычислить + гор_1 [[решетка];коорд_гор_1] (вычислить * $результат [гор] [[решетка];ширина_ячейки] )
316: вычислить + вер_1 [[решетка];коорд_вер_1] (вычислить * $результат [вер] [[решетка];высота_ячейки] )
317: вычислить + гор_2 [гор_1] [[решетка];ширина_ячейки]
318: вычислить + вер_2 [вер_1] [[решетка];высота_ячейки]
319:
320: если [[решетка];толщина_линии] > 0
321: увеличить гор_1 1
322: увеличить вер_1 1
323: конец
324:
325: присвоить $ЦветКисти [цвет] $ЦветЛинии [цвет]
326: присвоить $ТипКисти 1 $ТипЛинии 1 $ТолщинаЛинии 1
327:
328: выбрать [фигура]
329: вариант ячейка
330: рисовать прямоугольник [гор_1] [вер_1] [гор_2] [вер_2]
331: вариант круг
332: рисовать круг [гор_1] [вер_1] [гор_2] [вер_2]
333: вариант окружность
334: присвоить $ТипКисти 2 $ТолщинаЛинии 3
335: рисовать круг [гор_1] [вер_1] [гор_2] [вер_2]
336: вариант текст
337: рисовать текстВПрямоугольнике [гор_1] [вер_1] [гор_2] [вер_2] [текст]
338: другойВариант
339: показать сообщение "Не умею рисовать [фигура]."
340: конецВыбора
341:
342: возврат
343:
344: функция Решетка_написать_слово решетка гор вер направление текст
345: для (строка кСписку $результат [текст] )
346: Решетка_рисовать_фигуру [решетка] текст [гор] [вер] [[решетка];цвет_фона] [$ОбъектЦикла]
347: выбрать [направление]
348: вариант гор
349: увеличить гор
350: вариант вер
351: увеличить вер
352: другойВариант
353: увеличить гор
354: увеличить вер
355: конецВыбора
356: следующий
357: возврат
358: